class Student:
    role = '学生' #类属性
    def __init__(self,name,age):
        self.name = name #对象属性
        self.age = age #对象属性
    def get_name(self):#实例方法
        return self.name
    @classmethod
    def get_class_role(cls): #类方法，cls代表当前类名
        return cls.name
    @staticmethod
    def get_datetime(datatime): #静态方法，与类和对象都无关（无需访问类/对象属性或调用其方法）
        return datatime.now().strftime('%Y%m%d %H:%M%S')
lilei = Student('李磊' ,18) #生成对象
print(lilei.get_name())#对象调用实例方法
print(lilei.get_class_role())#对象调用类方法
print(lilei.get_datetime())#对象调用静态方法
#使用类名调用，注意类名后不加括号（加括号是调用类并生成对象，即实际为对象）
print(Student.get_class_role())#类名调用类方法
print(Student.get_datetime())#类名调用静态方法





#重写
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def get_name(self):
        """获取姓名"""
        return self.name
    def get_age(self):
        """获取年龄"""
        return  self.age
class Student(Person):
    def get_name(self):
        return '学生:'+self.name
class Staff(Person):
    def get_name(self):
        return '职员:'+self.name
std=Student("张三",21)
print(std.get_name)
print(super(Student,std).get_name())

sta=Staff("李四",32)
print(sta.get_name())


#多态
#多态建立在继承的基础上，多态是指不同的子类继承父类的某一方法后，可以在子类中覆盖并实现各自不容的逻辑
class Animal:
    def __int__(self,name):
        self.name = name

    def speak(self):
        pass
class Dog(Animal):
    def speak(self):
        return "woof!"
class Cat(Animal):
    def speak(self):
        return "Meow!"
def animal_speak(animal):
    print(animal.speak())

dog = Dog("Rufus")
cat = Cat("Fluffy")

animal_speak(dog) #输出”Woof！“
animal_speak(cat) #输出”Meow“